/**
 * 文件压缩(返回base64)
 * @param {*} file
 * @param w 宽
 * @param h 高
 * @returns base64
 */
export function compressImgByBase64(file, w, h) {
  var fileSize = parseFloat(parseInt(file["size"]) / 1024 / 1024).toFixed(2);
  var read = new FileReader();
  read.readAsDataURL(file);
  // eslint-disable-next-line no-unused-vars
  return new Promise(function (resolve, reject) {
    read.onload = function (e) {
      var img = new Image();
      img.src = e.target.result;
      img.onload = function () {
        // 生成canvas
        var canvas = document.createElement("canvas");
        var ctx = canvas.getContext("2d");
        var base64;
        // 创建属性节点
        canvas.setAttribute("width", w);
        canvas.setAttribute("height", h);
        ctx.drawImage(this, 0, 0, w, h);
        if (fileSize < 1) {
          // 如果图片小于一兆 那么压缩0.5
          base64 = canvas.toDataURL(file["type"], 0.5);
        } else if (fileSize > 1 && fileSize < 2) {
          // 如果图片大于1M并且小于2M 那么压缩0.5
          base64 = canvas.toDataURL(file["type"], 0.5);
        } else {
          // 如果图片超过2m 那么压缩0.2
          base64 = canvas.toDataURL(file["type"], 0.2);
        }
        resolve(base64);
      };
    };
  });
}

/**
 * 文件压缩(返回文件类型)
 * @param {*} file
 * @param w 宽
 * @param h 高
 * @returns file
 */
export function compressImgByFile(file, w, h) {
  var fileSize = parseFloat(parseInt(file["size"]) / 1024 / 1024).toFixed(2);
  var read = new FileReader();
  read.readAsDataURL(file);
  // eslint-disable-next-line no-unused-vars
  return new Promise(function (resolve, reject) {
    read.onload = function (e) {
      var img = new Image();
      img.src = e.target.result;
      img.onload = function () {
        // 生成canvas
        var canvas = document.createElement("canvas");
        var ctx = canvas.getContext("2d");
        var base64;
        // 创建属性节点
        canvas.setAttribute("width", w);
        canvas.setAttribute("height", h);
        ctx.drawImage(this, 0, 0, w, h);
        if (fileSize < 1) {
          // 如果图片小于一兆 那么压缩0.5
          base64 = canvas.toDataURL(file["type"], 0.5);
        } else if (fileSize > 1 && fileSize < 2) {
          // 如果图片大于1M并且小于2M 那么压缩0.5
          base64 = canvas.toDataURL(file["type"], 0.5);
        } else {
          // 如果图片超过2m 那么压缩0.2
          base64 = canvas.toDataURL(file["type"], 0.2);
        }
        // 回调函数返回file的值（将base64编码转成file）
        let files = dataURLtoFile(base64, file.name); // 如果后台接收类型为base64的话这一步可以省略?
        resolve(files);
      };
    };
  });
}

/**
 * base64转码（压缩完成后的图片为base64编码，这个方法可以将base64编码转回file文件）
 * @param {*} dataurl
 * @param {*} filename
 * @returns
 */
export function dataURLtoFile(dataurl, filename) {
  var arr = dataurl.split(",");
  var mime = arr[0].match(/:(.*?);/)[1];
  var bstr = atob(arr[1]);
  var n = bstr.length;
  var u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new File([u8arr], filename, { type: mime });
}

/**
 * 文件转换base64
 * @param {*} file
 * @returns
 */
export function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = (error) => reject(error);
  });
}

/**
 * 字节大小转显示文本
 * @param {} size
 */
export function byteToText(size) {
  let mb = Math.floor(size / (1024 * 1024));
  let kb = Math.floor(size / 1024);

  if (mb > 0) {
    return (size / (1024 * 1024)).toFixed(2) + "MB";
  } else if (kb > 0) {
    return (size / 1024).toFixed(2) + "KB";
  } else {
    return size.toFixed(2) + "B";
  }
}

/**
 * 创建临时url
 * @param {*} file
 */
export function getObjectURL(file) {
  var url = null;
  if (window.createObjectURL != undefined) {
    // basic
    url = window.createObjectURL(file);
  } else if (window.URL != undefined) {
    // mozilla(firefox)
    url = window.URL.createObjectURL(file);
  } else if (window.webkitURL != undefined) {
    // webkit or chrome
    url = window.webkitURL.createObjectURL(file);
  }
  return url;
}

/**
 * 导出文件
 * @param {*} file
 * @param {*} name
 */
export function exportFile(file, name) {
  let url = window.URL.createObjectURL(new Blob([file]));
  exportFileByUrl(url, name)
}

/**
 * 导出文件
 * @param {*} url
 * @param {*} name
 */
export function exportFileByUrl(url, name, target) {
  let link = document.createElement("a");
  link.style.display = "none";
  link.href = url;
  if (target) {
    link.target = "_blank";
  }
  link.setAttribute("download", name);
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link); // 下载完成移除元素
  window.URL.revokeObjectURL(url); // 释放掉blob对象
}
